#include <iostream>
using namespace std;

/*
说明：C++ 中不再区分初始化和未初始化的全局变量、静态变量的存储区，如果非要区分下述程序标注在了括号中
*/

int g_var = 0; // g_var 在全局区（.data 段）
char *gp_var;  // gp_var 在全局区（.bss 段）

int main()
{
    int var;                    // var 在栈区
    cout << "&var = " << &var << endl;
    char *p_var;                // p_var 在栈区
    if (p_var == nullptr) {
        cout << "p_var == nullptr" << endl;
    }
    cout << "&p_var = " << &p_var << endl;
    char arr[] = "abc";         // arr 为数组变量，存储在栈区；"abc"为字符串常量，存储在常量区
    cout << "arr = " << &arr << endl;
    char *p_var1 = "123456";    // p_var1 在栈区；"123456"为字符串常量，存储在常量区
    cout << "p_var1 = " << &p_var1 << endl;
    static int s_var = 0;       // s_var 为静态变量，存在静态存储区（.data 段）
    cout << "&s_var = " << &s_var << endl;
    p_var = (char *)malloc(10); // 分配得来的 10 个字节的区域在堆区
    cout << "malloc, &p_var = " << &p_var << endl;
    cout << "&g_var = " << &g_var << endl;
    cout << "&gp_var = " << &gp_var << endl;
    free(p_var);
    return 0;
}